package com.woniu.service.Impl.backpage;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.woniu.dao.backpage.GoodsTypeDao;
import com.woniu.dao.backpage.GoodsTypeDao;
import com.woniu.entity.GoodsType;
import com.woniu.entity.GoodsType;
import com.woniu.service.backpage.IGoodsTypesService;
import com.woniu.util.RequestParams;
import com.woniu.util.ResData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class GoodsTypesServiceImpl implements IGoodsTypesService {

    @Autowired(required = false)
    private GoodsTypeDao goodsTypeDao;


    @Override
    public ResData<?> findGoodsTypeByConditions(RequestParams<GoodsType> requestParams) {
        PageHelper.startPage(requestParams.getPageNo(), requestParams.getPageSize());
        PageInfo<GoodsType> goodsTypePageInfo=new PageInfo<>(goodsTypeDao.findGoodsTypeByConditions(requestParams.getData().getTypename()
                ));
        return new ResData<>().ok(goodsTypePageInfo);
    }

    @Override
    public ResData<?> deleteGoodsType(Integer id) {
        goodsTypeDao.deleteGoodsType(id);
        return new ResData<>().ok();
    }

    @Override
    public ResData<?> findFirstGoodsType() {
        List<GoodsType> firstGoodsType = goodsTypeDao.findFirstGoodsType();
        return new ResData<>().ok(firstGoodsType);
    }

    @Override
    public ResData<?> insertFirstLevel(GoodsType goodsType) {
        goodsTypeDao.insertFirstLevel(goodsType);
        return new ResData<>().ok();
    }

    @Override
    public ResData<?> insertSecondLevel(GoodsType goodsType) {
        goodsTypeDao.insertSecondLevel(goodsType);
        return new ResData<>().ok();
    }

    @Override
    public ResData<?> getStructuredGoodsType() {
        //查询所有商品类型
        List<GoodsType> allType = goodsTypeDao.findAllGoodsType();

        //将所有商品类型筛选得到一级商品类型
        List<GoodsType> rootGoodsType = allType.stream().filter(e -> e.getParent() == null).collect(Collectors.toList());

        //一级类型找子级类型
        rootGoodsType.forEach(e->{
            e.setChildren(getChildrenType(e.getValue(),allType));
        });

        Map map = new HashMap();
        map.put("rootGoodsType",rootGoodsType);

        return new ResData<>().ok(map);
    }

    public List<GoodsType> getChildrenType(Integer value,List<GoodsType> type){
        List<GoodsType> childrenTypes = new ArrayList<>();
        type.forEach(e-> {
            if (value.equals(e.getParent())) {
                childrenTypes.add(e);
            }
        });

        //递归重复父找子方法，二级找三级
        childrenTypes.forEach(e->{
            e.setChildren(getChildrenType(e.getValue(),type));
        });

        //递归结束条件
        if (CollectionUtils.isEmpty(childrenTypes)){
            return null;
        }
        return childrenTypes;
    }

}
